home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Scene Storm
/
Scene Storm - Volume 1.iso
/
coding
/
c
/
amiexpress
/
utils
/
rexxdoor2.33+
/
rexxdoor.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-02-22
|
11KB
|
327 lines
#include <intuition/intuitionbase.h>
#include <clib/rexxsyslib_protos.h>
#include <exec/exec.h>
#include <rexx/rxslib.h>
#include <rexx/storage.h>
#include <rexx/rexxio.h>
#include <rexx/errors.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos/dostags.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <clib/alib_protos.h>
#include "sc:ae/CmodGlue/doorheader.h"
#include "sc:ae/CmodGlue/glue.h"
#define SM sendmessage
#define PM prompt
#define HK hotkey
#define GU getuserstring
#define PU putuserstring
struct IntuitionBase *IntuitionBase;
struct RexxSysBase *RexxSysBase;
struct MsgPort *MyRexxPort;
ULONG RexxSig;
void OpenRexxPort(int node);
void CheckRexxMessage();
void CloseRexx(int opt);
void RemoveRexxPort(int opt);
void end();
int node;
struct RexxMsg *rexxmsg;
struct MsgPort RexxPort;
struct RexxMsg *OutMsg, *CreateRexxMsg();
char DoorVer[]="13";
struct rx_mes *mslist;
char CommandLine[200];
void LastCommand(void);
int StartProcess(char *s,ULONG Stack);
void main(int argc,char *argv[]);
void main(int argc,char *argv[])
{
char Command[200];
if(argc==1)
{
printf("RexxDoor v1.4, written by Joseph Hodge\n");
printf("\n");
printf("This module is called by AmiExpress 1.1v+\n");
printf("Requires: RexxMast, RX & Rexxsyslib.library\n");
exit(0);
}
node=argv[1][0]-'0';
OpenRexxPort(argv[1][0]-'0');
Register(argv[1][0]-'0');
node=argv[1][0]-'0';
GU(Command,BB_TASKPRI);
SetTaskPri(FindTask(0),(LONG)atol(Command));
strcpy(CommandLine,argv[2]);
sprintf(Command,"sys:rexxc/RX %s %c",CommandLine,argv[1][0]);
StartProcess(Command,4096L);
CheckRexxMessage();
CloseRexx(0);
}
void end()
{
rexxmsg->rm_Result1=10;
rexxmsg->rm_Result2=0;
ReplyMsg((struct Message *) rexxmsg);
CloseRexx(1);
exit(0);
}
void OpenRexxPort(int node)
{
if((IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0L))==NULL)
{
printf("can't open intuition.library\n");
exit(0);
}
if((RexxSysBase = (struct RexxSysBase *)OpenLibrary(RXSNAME,0)) == NULL)
{
puts("rexxsyslib.library not found, AREXX port disabled\n");
}
switch(node)
{
case 0: InitPort(&RexxPort,"AERexxPort0"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl0",0L); break;
case 1: InitPort(&RexxPort,"AERexxPort1"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl1",0L); break;
case 2: InitPort(&RexxPort,"AERexxPort2"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl2",0L); break;
case 3: InitPort(&RexxPort,"AERexxPort3"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl3",0L); break;
case 4: InitPort(&RexxPort,"AERexxPort4"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl4",0L); break;
case 5: InitPort(&RexxPort,"AERexxPort5"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl5",0L); break;
case 6: InitPort(&RexxPort,"AERexxPort6"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl6",0L); break;
case 7: InitPort(&RexxPort,"AERexxPort7"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl7",0L); break;
case 8: InitPort(&RexxPort,"AERexxPort8"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl8",0L); break;
case 9: InitPort(&RexxPort,"AERexxPort9"); AddPort(&RexxPort);
MyRexxPort=(struct MsgPort *) CreatePort("AERexxControl9",0L); break;
}
RexxSig = 1L << MyRexxPort->mp_SigBit;
}
void CheckRexxMessage(void)
{
char String[200];
char Tmp[200];
long t;
int i;
int cmd;
int PromptWidth=100;
char PutUserStr[200];
struct rx_mes *mslist2;
strcpy(PutUserStr,"");
while(1)
{
rexxmsg=(struct RexxMsg *)WaitPort((struct MsgPort *) MyRexxPort);
while(( rexxmsg = (struct RexxMsg *) GetMsg((struct MsgPort *) MyRexxPort)))
{
rexxmsg->rm_Result1=0L;
rexxmsg->rm_Result2=0L;
if( !strnicmp(rexxmsg->rm_Args[0],"getuser",7) )
{
strcpy(String,rexxmsg->rm_Args[0]+8);
cmd=atoi(String);
GU(String,atoi(String));
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
} else
if( !strnicmp(rexxmsg->rm_Args[0],"putuser",7) )
{
strcpy(String,rexxmsg->rm_Args[0]+8);
cmd=atoi(String);
PU(PutUserStr,atoi(String));
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
} else
if( !strnicmp(rexxmsg->rm_Args[0],"ConvertToDate",13) )
{
strcpy(String,rexxmsg->rm_Args[0]+14);
DateToString(atol(String),String);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
} else
if( !strnicmp(rexxmsg->rm_Args[0],"ConvertToTime",13) )
{
strcpy(String,rexxmsg->rm_Args[0]+14);
TimeToString(atol(String),String);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
} else
if(!strnicmp(rexxmsg->rm_Args[0],"putinfo",7))
{
strcpy(String,rexxmsg->rm_Args[0]+8);
PutInfo(atoi(PutUserStr),atoi(String));
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
}else if(!strnicmp(rexxmsg->rm_Args[0],"VerRexxDoor",11))
{
strcpy(String,DoorVer);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
}else
if(!strnicmp(rexxmsg->rm_Args[0],"transmit",8))
{
strcpy(String,rexxmsg->rm_Args[0]+9);
SM(String,1);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
} else
if(!strnicmp(rexxmsg->rm_Args[0],"sendmessage",11))
{
strcpy(String,rexxmsg->rm_Args[0]+12);
SM(String,0);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
}else
if(!strnicmp(rexxmsg->rm_Args[0],"EditFile",8))
{
strcpy(String,rexxmsg->rm_Args[0]+9);
Editfile(String,atoi(PutUserStr));
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
}
else
if(!strnicmp(rexxmsg->rm_Args[0],"sendstring",10))
{
strcpy(String,rexxmsg->rm_Args[0]+11);
SM(String,0);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
}else
if(!strnicmp(rexxmsg->rm_Args[0],"RemoveReserved",14))
{
strcpy(String,rexxmsg->rm_Args[0]+15);
i=strlen(String)-1;
while(i>-1)
{
if(String[i]=='/' || String[i]=='*' || String[i]=='?' ||
String[i]=='#' || String[i]==' ') String[i]='_';
i--;
}
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
}else
if(!strnicmp(rexxmsg->rm_Args[0],"getchar",7))
{
HK("",String);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
}else
if(!strnicmp(rexxmsg->rm_Args[0],"showfile",8))
{
strcpy(String,rexxmsg->rm_Args[0]+9);
showfile(String);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
}
else
if(!strnicmp(rexxmsg->rm_Args[0],"flagfile",8))
{
strcpy(String,rexxmsg->rm_Args[0]+9);
FlagFile(String);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
}
else
if(!strnicmp(rexxmsg->rm_Args[0],"showgfile",9))
{
strcpy(String,rexxmsg->rm_Args[0]+10);
showgfile(String);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
}
else
if(!strnicmp(rexxmsg->rm_Args[0],"PUTUSTR",7))
{
strcpy(PutUserStr,rexxmsg->rm_Args[0]+8);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
}
else
if(!strnicmp(rexxmsg->rm_Args[0],"RECEIVE",7))
{
PromptWidth=atoi(rexxmsg->rm_Args[0]+8)-1;
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=0;
}else
if(!strnicmp(rexxmsg->rm_Args[0],"QUERY",5))
{
strcpy(String,rexxmsg->rm_Args[0]+6);
SM(String,0);
PM("",String,PromptWidth);
rexxmsg->rm_Result1=0;
rexxmsg->rm_Result2=(long)CreateArgstring(String,(long)strlen(String));
}else
if(!strnicmp(rexxmsg->rm_Args[0],"SHUTDOWN",8))
{
ShutDown();
ReplyMsg((struct Message *) rexxmsg);
return;
}
ReplyMsg((struct Message *) rexxmsg);
}
}
}
void CloseRexx(int opt)
{
RemoveRexxPort(opt);
RemPort(&RexxPort); /* unlink it */
FreePort(&RexxPort);
CloseLibrary((struct Library *)RexxSysBase);
CloseLibrary((struct Library *)IntuitionBase);
}
void RemoveRexxPort(int opt)
{
struct RexxMsg *rexxmsg;
if(MyRexxPort)
{
while(rexxmsg = (struct RexxMsg *) GetMsg((struct MsgPort *) MyRexxPort))
{
if(opt)rexxmsg->rm_Result1=10;
ReplyMsg((struct Message *) rexxmsg);
}
DeletePort((struct MsgPort *) MyRexxPort);
}
}
void LastCommand(void)
{
}
struct TagItem tags[]={ {SYS_Input,0},{SYS_Output,0},{SYS_Asynch,TRUE},{NP_StackSize,0},{NP_Priority,0},{TAG_DONE,0}};
int StartProcess(char *s,ULONG Stack)
{
tags[3].ti_Data=Stack;
if(SystemTagList(s,tags)==-1)
{
return(0);
}
return(1);
}